package com.gwt.material.client.user.service.impl;

import com.gwt.material.client.user.dao.UserSourceRelMapper;
import com.gwt.material.client.user.po.UserSourceRel;
import com.gwt.material.client.user.service.UserSourceRelService;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.update.UpdateChain;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

@Service
public class UserSourceRelServiceImpl extends ServiceImpl<UserSourceRelMapper, UserSourceRel> implements UserSourceRelService {
    @Override
    public void refreshUserSourceRel(String userId, String relId, Integer source, String refreshToken){
        UserSourceRel userSourceRel = getUserBySource(userId, relId, source);
        if (userSourceRel == null){userSourceRel = new UserSourceRel();
            userSourceRel.setUserId(userId);
            userSourceRel.setRelId(relId);
            userSourceRel.setSource(source);
            userSourceRel.setRefreshToken(refreshToken);
            //设置登陆时间
            userSourceRel.setLastLoginTime(LocalDateTime.now());
            this.save(userSourceRel);
        }else {
            UpdateChain.of(UserSourceRel.class)
                    .setRaw(UserSourceRel :: getLastLoginTime, LocalDateTime.now())
                    .setRaw(UserSourceRel :: getRefreshToken, refreshToken)
                    .where(UserSourceRel :: getUserId).eq(userId)
                    .and(UserSourceRel :: getRelId).eq(relId)
                    .and(UserSourceRel :: getSource).eq(source)
                    .update();
        }
    }

    @Override
    public UserSourceRel getUserBySource(String userId, String relId, Integer source) {
        QueryWrapper queryWrapper = QueryWrapper.create();
        queryWrapper.eq(UserSourceRel :: getUserId, userId);
        queryWrapper.eq(UserSourceRel :: getRelId, relId);
        queryWrapper.eq(UserSourceRel :: getSource, source);
        return this.getOne(queryWrapper);
    }
}
